/*
 * AdminManager.cpp
 *
 *  Created on: Oct 21, 2011
 *      Author: kimi
 */

#include "AdminManager.h"

AdminManager::AdminManager(Properties *_properties) {
	adminFilePath = _properties->get("ArchivoAdministradoresPath");
	keyLength = _properties->getInt("RSA_KEY_LENGTH");
	privateKeyFile = _properties->get("RSA_PRIVATE_KEY_FILE");
	/*
	adminFile = new Properties(adminFilePath);
	if (adminFile->load() == false) {
		cerr << "<<ERROR>> No se ha podido leer el archivo de administradores"<<endl;
	}
	*/
}

AdminManager::~AdminManager() {
	// TODO Auto-generated destructor stub
}

bool AdminManager::login(string username, string password) {
	bool validUserAndPass = false;

	// desencripto el archivo de administradores
	RSA * rsa = new RSA(keyLength);
	Properties* key = new Properties(privateKeyFile);
	if (key->load() == false) {
		delete rsa;
		delete key;
		cerr << "No se pudo cargar el archivo con la clave privada" << endl;
		return false;
	}
	unsigned long n = key->getInt("N");
	unsigned long d = key->getInt("D");

	//cout << "N= " << n << " -D= " << d << endl;
	//cout << "Archivo= " << adminFilePath << endl;

	// recupero el registro del archivo plano
	string plainFilePath = "plain.temp";
	if (rsa->decrypt(d,n,adminFilePath,plainFilePath) == false) {
		cerr << "No se pudo desencriptar el archivo de administradores." << endl;
		delete rsa;
		delete key;
		return false;
	}

	Properties *adminFile = new Properties(plainFilePath);

	string pass = adminFile->get(username);
	if (password.compare(pass) == 0) {
		validUserAndPass = true;
	}

	// borro el archivo plano
	if(remove(plainFilePath.c_str()) != 0) {
		cerr << "No se pudo borrar el archivo de administradores en texto plano." << endl;
	}

	delete rsa;
	delete key;
	return validUserAndPass;
}
